package entry;

import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.lang.reflect.Parameter;
import java.util.Arrays;
import java.util.Map;

public class GetSqlValue {
    ///通过反射的方式获取对应对象
    public static void getSqlValues(Object object, Map<String,String[]> map){
        //然后遍历marketMapper的值
        //想想怎么遍历，想到啦
        char[] aa=new char[]{'a','b','c'};
        System.out.println(new String(aa));

        //获取object上的所有方法实例
        Class objectClass=object.getClass();
        Method[] methods= objectClass.getDeclaredMethods();

        map.forEach((key,value)->{
            //遍历map，得到key和value
            //然后？获取对应的get方法，查找
            char[] keyName=key.toCharArray();
            keyName[0]-=32;
            String methodName="set"+ String.valueOf(keyName);
            //通过反射获取对应name
            try {
                //获取方法的时候要获取对应的type，所以先获得type在获得智能
                Field field=objectClass.getDeclaredField(key);
                Class<?> type=field.getType();
                Method useMethod=objectClass.getMethod(methodName,type);
                System.out.println(useMethod);
                if (useMethod!=null){
                    //这个地方其实拿到的都是string，要进行对应值的转换，怎么获取呢
                    //获取对应值的类型
                    Parameter[] parameters=useMethod.getParameters();
                    if (parameters.length>1)return;
                    //获取参数类型
                    //这个类型一定不可能是泛型类型，直接判单吧
                    if (type.equals(int.class)){
                        useMethod.invoke(object,Integer.valueOf(value[0]));
                    }else {
                        useMethod.invoke(object,value[0]);
                    }
                }
            } catch (NoSuchMethodException | InvocationTargetException | IllegalAccessException e) {
//                throw new RuntimeException(e);
                System.out.println(1111+e.getMessage());
//                e.printStackTrace();?
            } catch (NoSuchFieldException e) {
//                throw new RuntimeException(e);
            }
        });
    }
}
